//
//  DKLoginViewModel.swift
//  Sina
//
//  Created by 赵柏清 on 16/8/1.
//  Copyright © 2016年 DarkZhao. All rights reserved.
//

import UIKit
/*
    1.放网络请求
    2.放模型
*/

class DKLoginViewModel: NSObject {
    
    static let sharedInstance : DKLoginViewModel = DKLoginViewModel()
    
    // 此模型有什么用呢?
/// 用来作为判断是否登录成功的依据?
    var isLoginModel : DKLoginModel?
    
    var isLogin : Bool {
       return isLoginModel?.access_token == nil ? false : true
    }
    
    // 直接把access_token放在viewModel里/方便调用
    var access_Token : String {
        return (isLoginModel?.access_token)!
    }
    
    // 在viewModel初始化的时候就给model赋值
   private  override init() {
        isLoginModel = DKLoginModel.readModel()
    }
    
     func getAccessToken(code: String,success:()->(),failed:(error:NSError)->()){
        
        // URLString
        let URLString = "https://api.weibo.com/oauth2/access_token"
        
        // 请求参数
        /*
        必选	类型及范围	说明
        client_id	true	string	申请应用时分配的AppKey。
        client_secret	true	string	申请应用时分配的AppSecret。
        grant_type	true	string	请求的类型，填写authorization_code
        
        grant_type为authorization_code时
        必选	类型及范围	说明
        code	true	string	调用authorize获得的code值。
        redirect_uri	true	string	回调地址，需需与注册应用里的回调地址一致。
        */
        let parameters = ["client_id":AppKey,
            "client_secret":AppSecret,
            "grant_type":"authorization_code",
            "code":code,
            "redirect_uri":redirectUri]
        
        // 可以打印一下参数,方便自己检查,也方便和后台调试
        printLog("\(parameters)")
        
        // 获取网络工具单例,发送网络请求
        DKNetworkingTool().manager .POST(URLString, parameters: parameters, progress: nil, success: { (_, JSON) -> Void in
            
            guard let OJSON = JSON else {
                return
            }
            
            let dict = OJSON as! [String : AnyObject]
            // MARK:字典转模型
            let model = DKLoginModel(dict: dict)
            
            self.getPersonInfo(model, success: success, failed: failed)
            
            }) { (_, error) -> Void in
                printLog("\(error.description)")
                failed(error: error)
        }
        
    }
    
    func getPersonInfo(model: DKLoginModel,success:()->(),failed:(error:NSError)->()){
        
        let URLString = "https://api.weibo.com/2/users/show.json"
        
        guard let accessToken = model.access_token,let uid = model.uid else {
            printLog("access_token和uid必须要有")
            return
        }
        
        let parameters = ["access_token":accessToken,
            "uid":uid]
        
        printLog("\(parameters)")
        
        DKNetworkingTool().manager .GET(URLString, parameters: parameters, progress: nil
            , success: { (_, JSON) -> Void in
                
//                printLog("成功获得accessToken之后返回的数据\(JSON)")
                
                guard let OJSON = JSON else {
                    return
                }
                let JSONDict = OJSON as! [String : AnyObject]
                model.screen_name = JSONDict["screen_name"] as? String
                model.profile_image_url = JSONDict["profile_image_url"] as? String
                
                
//                DKLoginViewModel.sharedInstance.isLoginModel = model
                
                
                self.isLoginModel = model
                
                printLog("\(self.isLoginModel?.access_token)")
                
                // 归档保存
                model.saveData("userInfo")
                
                success()
                
                
            }) { (_, error) -> Void in
                printLog("\(error.description)")
                failed(error: error)
        }
    }


}
